#!/usr/bin/env python
# -*- coding: utf-8 -*-
# start.py - 智能地址解析服务启动脚本

import os
import sys
import traceback
import logging
from dotenv import load_dotenv

# 获取当前脚本的目录
current_dir = os.path.dirname(os.path.abspath(__file__))

# 将当前目录添加到 Python 路径中，确保可以导入应用
if current_dir not in sys.path:
    sys.path.insert(0, current_dir)

print("启动地址解析服务...")

# 加载环境变量 (让python-dotenv库处理编码)
env_path = os.path.join(current_dir, '.env')
if os.path.exists(env_path):
    load_dotenv(env_path)
    print(f"已加载环境变量文件: {env_path}")
else:
    print(f"警告: {env_path} 不存在")
    load_dotenv()
    print("尝试从当前目录加载环境变量")

# 导入日志配置
try:
    from app.core.logging_config import setup_logging
    # 初始化日志
    logger = setup_logging()
    logger.info("日志系统初始化成功")
except Exception as e:
    print(f"初始化日志系统失败: {e}")
    # 如果日志系统初始化失败，使用基本的日志配置
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s [%(levelname)s] %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    logger = logging.getLogger()
    logger.info("使用基本日志配置作为备用")

# 检查必要的环境变量
deepseek_api_key = os.getenv("DEEPSEEK_API_KEY")
doubao_api_key = os.getenv("DOUBAO_API_KEY")

if not deepseek_api_key and not doubao_api_key:
    error_msg = "错误: 未找到任何有效的 API Key"
    print(error_msg)
    print("请确保 .env 文件中至少包含以下任一配置:")
    print('DEEPSEEK_API_KEY="your_deepseek_api_key"')
    print('DOUBAO_API_KEY="your_doubao_api_key"')
    logger.error(error_msg)
    sys.exit(1)

# 显示可用的模型
available_models = []
if deepseek_api_key:
    available_models.append("DeepSeek")
    logger.info("已加载 DeepSeek API密钥")
if doubao_api_key:
    available_models.append("豆包")
    logger.info("已加载 豆包 API密钥")

print(f"可用的AI模型: {', '.join(available_models)}")
logger.info(f"可用的AI模型: {', '.join(available_models)}")

# 确定运行环境
env = os.getenv("APP_ENV", "production").lower()
debug_mode = env in ["development", "dev", "debug"]

if debug_mode:
    logger.info(f"运行环境: 开发模式 (debug={debug_mode})")
else:
    logger.info(f"运行环境: 生产模式")

# 导入并运行Flask应用
try:
    from app.main import app
    logger.info("成功导入Flask应用")
except Exception as e:
    error_msg = f"导入应用失败: {e}"
    print(error_msg)
    print("请检查项目结构是否完整")
    logger.error(error_msg, exc_info=True)
    sys.exit(1)

# 运行应用
if __name__ == "__main__":
    try:
        # 从环境变量中获取端口，默认为 5000
        port = int(os.environ.get('PORT', 5000))
        
        # 启动应用
        logger.info(f"智能地址解析服务正在启动，运行环境：{'开发模式' if debug_mode else '生产模式'}")
        logger.info(f"服务将在 http://localhost:{port} 上运行")
        print(f"智能地址解析服务正在启动，运行环境：{'开发模式' if debug_mode else '生产模式'}")
        print(f"服务将在 http://localhost:{port} 上运行")
        print(f"按 Ctrl+C 停止服务")
        
        # 记录启动日志
        logger.info(f"服务器启动，监听地址: 0.0.0.0:{port}")
        
        # 启动Flask应用
        app.run(host='0.0.0.0', port=port, debug=debug_mode)
        
    except Exception as e:
        error_msg = f"启动服务时发生错误：{e}"
        print(error_msg)
        logger.error(error_msg, exc_info=True)
        logger.error(f"错误详情: {traceback.format_exc()}")
        sys.exit(1) 